package com.rickpan.repository;

import com.rickpan.entity.WorkCategory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 工作分类Repository接口
 */
@Repository
public interface WorkCategoryRepository extends JpaRepository<WorkCategory, Long> {

    /**
     * 查找用户的所有分类（包括系统分类）
     * @param userId 用户ID
     * @return 分类列表
     */
    @Query("SELECT wc FROM WorkCategory wc WHERE wc.userId = :userId OR wc.isSystem = true ORDER BY wc.isSystem DESC, wc.createdAt ASC")
    List<WorkCategory> findByUserIdOrSystemCategories(@Param("userId") Long userId);

    /**
     * 查找系统分类
     * @return 系统分类列表
     */
    List<WorkCategory> findByIsSystemTrueOrderByCreatedAtAsc();

    /**
     * 查找用户自定义分类
     * @param userId 用户ID
     * @return 用户分类列表
     */
    List<WorkCategory> findByUserIdAndIsSystemFalseOrderByCreatedAtAsc(Long userId);

    /**
     * 检查分类名称是否已存在（用户级别）
     * @param userId 用户ID
     * @param name 分类名称
     * @return 是否存在
     */
    boolean existsByUserIdAndName(Long userId, String name);

    /**
     * 检查系统分类名称是否已存在
     * @param name 分类名称
     * @return 是否存在
     */
    boolean existsByIsSystemTrueAndName(String name);

    /**
     * 根据用户ID和分类名称查找
     * @param userId 用户ID
     * @param name 分类名称
     * @return 分类对象
     */
    WorkCategory findByUserIdAndName(Long userId, String name);

    /**
     * 根据系统分类名称查找
     * @param name 分类名称
     * @return 系统分类对象
     */
    WorkCategory findByIsSystemTrueAndName(String name);
}
